package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yunke.entity.YunkeUserNotification;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 用户通知Mapper接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeUserNotificationMapper extends BaseMapper<YunkeUserNotification> {

    /**
     * 获取用户未读通知统计
     * 
     * @param userId 用户ID
     * @return 统计结果
     */
    Map<String, Object> getUnreadCountByType(@Param("userId") Long userId);

    /**
     * 批量标记为已读
     * 
     * @param userId 用户ID
     * @param notificationIds 通知ID列表
     * @return 更新行数
     */
    int batchMarkAsRead(@Param("userId") Long userId, @Param("notificationIds") List<Long> notificationIds);

    /**
     * 标记指定类型的所有通知为已读
     * 
     * @param userId 用户ID
     * @param notificationType 通知类型
     * @return 更新行数
     */
    int markAllAsRead(@Param("userId") Long userId, @Param("notificationType") Integer notificationType);

    /**
     * 批量删除通知
     * 
     * @param userId 用户ID
     * @param notificationIds 通知ID列表
     * @return 删除行数
     */
    int batchDelete(@Param("userId") Long userId, @Param("notificationIds") List<Long> notificationIds);

    /**
     * 清空指定类型的通知
     * 
     * @param userId 用户ID
     * @param notificationType 通知类型
     * @return 删除行数
     */
    int clearNotifications(@Param("userId") Long userId, @Param("notificationType") Integer notificationType);

    /**
     * 清理过期通知
     * 
     * @param currentTime 当前时间
     * @return 删除行数
     */
    int cleanExpiredNotifications(@Param("currentTime") Long currentTime);

    /**
     * 获取通知统计信息
     * 
     * @return 统计信息
     */
    Map<String, Object> getNotificationStatistics();
} 